package com.lmf.juc.AuxiliaryClass;

import java.util.concurrent.CountDownLatch;

/**
 * JUC常用的三大辅助类之一（计数类）：（1）CountDownLatch类
 */
public class CountDownLatchDemo {
    public static void main(String[] args) throws InterruptedException {
        /**
         * 创建CountDownLatch类，必须指定初始值，这里设为6
         */
        CountDownLatch countDownLatch = new CountDownLatch(6);

        //模拟六个同学先后离开教室后，班长最后锁门
        for (int i = 1; i <= 6; i++) {
            new Thread(() -> {
                System.out.println(Thread.currentThread().getName() + "：离开教室。");
                /**
                 * countDown()：每次调用，使CountDownLatch类的初始值减一，
                 *  每个人离开教室后，计数 -1，因此每个线程都需要调用一次
                 */
                countDownLatch.countDown();
            },String.valueOf(i)).start();
        }

        /**
         *  当计数为0时，await()方法之后的代码才可以被继续执行，否则会一直处于等待状态
         */
        countDownLatch.await();
        System.out.println("班长离开教室，并锁门");
    }
}
